HW 30 - CFM-68K Ç©ÇÁ ADBOp ÇåƒÇ—èoÇ∑ï˚ñ@

(1997 îN 5 åé 11ì˙)

Q: CFM-68K ÉvÉçÉZÉXÇ©ÇÁ ADBOp ÇåƒÇ—èoÇ∑ÇΔÅAÉoÉXÉGÉâÅ[Ç≈ÉNÉâÉbÉVÉÖǵNjÇ∑ÅBǫǧǵÇΩÇÁDZÇÃñ‚ëËÇâåàÇ≈Ç´ÇÈÇ≈ǵÇÂǧǩÅB

A: DZÇÍÇÕÅACFM-68K Çà InterfaceLib ÉtÉ@ÉCÉãì‡ÇÃÉOÉãÅ[ÉRÅ[ÉhDžNjǬÇÌÇÈä˘ímÇÃñ‚ëËÇ≈Ç∑ÅBâåàï˚ñ@ÇÕÅAé©ï™Ç≈ÉOÉãÅ[ÉRÅ[Éh (â∫ãLÇ…åfç⁄) Çópà”ǵÅA68K ÉgÉâÉbÉvÇíºê⁄åƒÇ—èoÇ∑DZÇΔÇ≈Ç∑ÅBà»â∫Ç…é¶Ç∑ÉOÉãÅ[ÉRÅ[ÉhÇëgÇ›çûÇfiÇΩÇflÇ…ÇÕÅAÇÌÇ∏Ç©Ç≈Ç∑Ç™ÅAÉvÉçÉOÉâÉÄÇ…éüÇÃÇÊǧǻïœçXÇ™ïKóvÇ≈Ç∑ÅB

  1. â∫ãLÇÃÉRÅ[ÉhÇéÊÇËçûÇ›ÅAADBOp Ç÷ÇÃåƒÇ—èoǵÇ MyADBOp Ç…ïœçXǵǃÇ≠ÇæÇ≥Ç¢ÅB
  2. äÆóπÉãÅ[É`ÉìÇçÏǡǃǢÇÈèÍçáÅAÉåÉWÉXÉ^ÉpÉâÉÅÅ[É^ (ÉIÉvÉVÉáÉìÇà refCon ÉoÉbÉtÉ@ÇΔÉfÅ[É^ÉoÉbÉtÉ@) ÇÕÅAíºê⁄éQèΔÇ∑ÇÈÇÃÇ≈ÇÕÇ»Ç≠ÅAÉtÉâÉOÉÅÉìÉgÇÃÉOÉçÅ[ÉoÉãïœêîÇΔǵǃéQèΔÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBDeveloper CD Ç…ÉTÉìÉvÉãÉRÅ[ÉhÅA"SetLED" ǙdžÇËÇ‹Ç∑ÅB

PowerPC ÉRÅ[ÉhÇ©ÇÁ 68K ÉRÅ[ÉhÇåƒÇ—èoÇ∑ÉOÉãÅ[ÉRÅ[ÉhÇÃé¿ëïï˚ñ@ÇÃè⁄ç◊ÇÕÅATECHNOTE 1127Åué∏ÇÌÇÍÇΩÉäÉìÉNÇãÅÇflǃÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅBDZÇÃñ‚ëËÇÕ System Software 8.1 Ç≈ämîFÇ≥ÇÍǃǢNjÇ∑ÅBÉoÉOÉåÉ|Å[Égî‘çÜÇÕ 2227159 Ç≈Ç∑ÅB

Å@

#include <Types.h>#include <DeskBus.h>#include <MixedMode.h>Å@
// ADBOp Çíºê⁄åƒÇ—èoÇ∑ÇÃÇ≈ÇÕÇ»Ç≠ÅAÉ^Å[ÉQÉbÉgÉAÅ[ÉLÉeÉNÉ`ÉÉDžǵÇΩǙǢÅA
// ê≥ǵǢåƒÇ—èoǵÇçsǧ MyADBOp ÇåƒÇ—èoÇ∑ÅBCFM68K ÇÃèÍçáÅA
// ADBOpBlock ç\ë¢ëÃÇê›íËǵÅAè„ãLÇà ADBGlue ÉãÅ[É`ÉìÇåƒÇ—èoÇ∑ÅB
// í èÌÇà 68K ÇΔ PowerPC ÇÃèÍçáÇÕÅAADBOp Çíºê⁄åƒÇ—èoÇ∑ÅB
Å@
pascal OSErr MyADBOp(
  Ptr refCon,
  ADBServiceRoutineUPP compRout,
  Ptr buffer,
  short commandNum)
{
Å@
#if TARGET_CPU_68K && TARGET_RT_MAC_CFM
Å@
  ADBOpBlock adbOpBlock;
  adbOpBlock.dataBuffPtr = buffer;
  adbOpBlock.opServiceRtPtr = compRout;
  adbOpBlock.opDataAreaPtr = refCon;
Å@
  // èdóv: DZÇÃÉTÉìÉvÉãÇ≈ÇÕÅAadbOpBlock ç\ë¢ëÃÇÉXÉ^ÉbÉNïœêîÇΔǵǃ
  // êÈåæÇµÇƒÇ¢ÇÈÅBí èÌÅAîÒìØä˙åƒÇ—èoǵÇ≈ÉXÉ^ÉbÉNÉpÉâÉÅÅ[É^ÇégǧÇÃÇÕ
  // ÇÊÇ≠ǻǢDZÇΔÇæÇ™ÅADZDZÇ≈ÇÕÅAADBOp Ç™ç\ë¢ëÃÇÃì‡óeÇÉRÉsÅ[Ç∑ÇÈÇÃÇ≈ÅA
  // îÒìØä˙åƒÇ—èoǵÇÃä‘Ç∏Ç¡ÇΔç\ë¢ëÃÇë∂ë±Ç≥ÇπÇÈïKóvÇÕǻǢÅB
Å@
  // íçà”: äÆëSÇä˙Ç∑ÇΩÇflÅArefCon ílÇ ADBOpBlock ç\ë¢ëÃÇ…ê›íËǵǃǢÇÈÅB
  // DZÇÃÉvÉçÉOÉâÉÄÇÕÅAäÆóπÉãÅ[É`ÉìÇ™ refCon Ç®ÇÊÇ—ÉfÅ[É^ÉoÉbÉtÉ@Ç
  // ÉvÉçÉZÉXÇÃÉOÉçÅ[ÉoÉãïœêîÇΔǵǃéQèΔÇ∑ÇÈDZÇΔÇâºíËǵǃǢÇÈÅB
  // CFM Ç≈ÇÕDZÇÍÇ™â¬î\ÅB
Å@
  return (OSErr)
    CallUniversalProc((UniversalProcPtr)NGetTrapAddress(0xA07C,0),
      kRegisterBased |
      RESULT_SIZE(SIZE_CODE(sizeof(OSErr))) |
      REGISTER_RESULT_LOCATION(kRegisterD0) |
      REGISTER_ROUTINE_PARAMETER(1,
      kRegisterA0,
      SIZE_CODE(sizeof(&gADBOpBlock))) |
      REGISTER_ROUTINE_PARAMETER(2,
      kRegisterD0,
      SIZE_CODE(sizeof(commandNum))),
      &gADBOpBlock,
      commandNum);
Å@
#else // TARGET_CPU_68K && TARGET_RT_MAC_CFM
Å@
  return (ADBOp(refCon, compRout, buffer, commandNum));
Å@
#endif // TARGET_CPU_68K && TARGET_RT_MAC_CFM
Å@
}

-----------

Rich Kubota
Worldwide Developer Technical Support

Å@

Å@


[ Technical Q&A's : Hardware (for Mac OS) : HW30 ]